From: Benjamin Otte Date: Sun, 15 Jan 2012 01:30:26 +0000 (+0100) Subject: css: Add a check function for specified types X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~39^2~18202 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=a81ac3d5cd71fedef35bf861e4232f2dee3e0a21;p=gtk%2B3.0.git css: Add a check function for specified types ... and use it. It seems kinda necessary for the refactoring I'm about to do... --- diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 7d2f18329d..927d345b68 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1212,6 +1212,9 @@ gtk_css_ruleset_add (GtkCssRuleset *ruleset, } else if (GTK_IS_CSS_STYLE_PROPERTY (prop)) { + g_return_if_fail (_gtk_css_style_property_is_specified_type (GTK_CSS_STYLE_PROPERTY (prop), + G_VALUE_TYPE (&value->value))); + _gtk_bitmask_set (ruleset->set_styles, _gtk_css_style_property_get_id (GTK_CSS_STYLE_PROPERTY (prop)), TRUE); diff --git a/gtk/gtkcssstyleproperty.c b/gtk/gtkcssstyleproperty.c index 348ea0d163..ad713ec422 100644 --- a/gtk/gtkcssstyleproperty.c +++ b/gtk/gtkcssstyleproperty.c @@ -28,6 +28,7 @@ #include "gtkprivatetypebuiltins.h" #include "gtkstylepropertiesprivate.h" +#include #include "gtkcssimagegradientprivate.h" #include "gtkcssimageprivate.h" @@ -441,6 +442,28 @@ _gtk_css_style_property_get_specified_type (GtkCssStyleProperty *property) return G_VALUE_TYPE (&property->initial_value); } +gboolean +_gtk_css_style_property_is_specified_type (GtkCssStyleProperty *property, + GType type) +{ + g_return_val_if_fail (GTK_IS_CSS_STYLE_PROPERTY (property), FALSE); + + /* If it's our specified type, of course it's valid */ + if (type == G_VALUE_TYPE (&property->initial_value)) + return TRUE; + + /* The special values 'inherit' and 'initial' are always valid */ + if (type == GTK_TYPE_CSS_SPECIAL_VALUE) + return TRUE; + + /* XXX: Someone needs to fix that legacy */ + if (G_VALUE_TYPE (&property->initial_value) == CAIRO_GOBJECT_TYPE_PATTERN && + type == GTK_TYPE_GRADIENT) + return TRUE; + + return FALSE; +} + /** * _gtk_css_style_property_compute_value: * @property: the property diff --git a/gtk/gtkcssstylepropertyprivate.h b/gtk/gtkcssstylepropertyprivate.h index 84cb1d2d8c..d207595b34 100644 --- a/gtk/gtkcssstylepropertyprivate.h +++ b/gtk/gtkcssstylepropertyprivate.h @@ -80,6 +80,8 @@ const GValue * _gtk_css_style_property_get_initial_value (GtkCssStyleProperty *property); GType _gtk_css_style_property_get_computed_type (GtkCssStyleProperty *property); GType _gtk_css_style_property_get_specified_type (GtkCssStyleProperty *property); +gboolean _gtk_css_style_property_is_specified_type (GtkCssStyleProperty *property, + GType type); void _gtk_css_style_property_compute_value (GtkCssStyleProperty *property, GValue *computed,